<template>
	<view>
		<view class="canvas-img-code" @click="refresh()">
			<canvas :style="{width:width+'px',height:height+'px'}" canvas-id="imgcanvas" @error="canvasIdErrorCallback"></canvas>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				width: 100,
				height: 28
			}
		},
		methods: {
			init() {
				let context = uni.createCanvasContext('imgcanvas', this),
					w = this.width,
					h = this.height;
				context.setFillStyle("#C1C9BC");
				context.setLineWidth(5);
				context.fillRect(0, 0, w, h);
				let pool = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "I", "M", "N", "O", "P", "Q", "R", "S",
						"T", "U", "V", "W", "S", "Y", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"
					],
					str = '';
				for (let i = 0; i < 4; i++) {
					let c = pool[this.rn(0, pool.length - 1)];
					let deg = this.rn(-30, 30);
					context.setFontSize(15);
					context.setTextBaseline("top");
					context.setFillStyle(this.rc(0, 150));
					context.save();
					context.translate(25 * i + 15, parseInt(h / 1.5));
					context.rotate(deg * Math.PI / 180);
					context.fillText(c, -15 + 5, -8);
					context.restore();
					str += c;
				}
				this.$emit('changeCode', str)
				for (let i = 0; i < 40; i++) {
					context.beginPath();
					context.arc(this.rn(0, w), this.rn(0, h), 1, 0, 2 * Math.PI);
					context.closePath();
					context.setFillStyle(this.rc(150, 200));
					context.fill();
				}
				context.draw();
			},
			rc(min, max) {
				let r = this.rn(min, max);
				let g = this.rn(min, max);
				let b = this.rn(min, max);
				return "rgb(" + r + "," + g + "," + b + ")";
			},
			rn(max, min) {
				return parseInt(Math.random() * (max - min)) + min;
			},
			refresh() {
				this.init();
			},
			canvasIdErrorCallback(e) {
				console.error(e.detail.errMsg)
			}
		}
	}
</script>

<style scoped>
	.codeView {
		display: flex;
		flex-direction: row;
		align-items: center;
		justify-content: center;
	}

	.canvas-img-code {
		/* display: inline-block; */
	}
</style>
